package com.facade.obra;

import java.util.List;
import java.util.Set;

import com.comun.filtro.FiltroLista;
import com.modelo.entity.Obra;
import com.modelo.entity.ObraDocumento;

/**
 * Interfaz donde definimos los metodos de Facade.
 * 
 * @author David
 * 
 */
public interface IGestionObra {
	/**
	 * Actualiza la obra, que le pasamos como parametro.
	 * 
	 * @param obra
	 */
	void actualizar(Obra obra);

	/**
	 * Devuelve la obra junto con los documentos asociados a la misma.
	 * 
	 * @param Obra
	 * @return Obra
	 */
	Obra attachDocumentos(Obra obra);

	/**
	 * Crea una nueva obra.
	 * 
	 * @param transientInstance
	 */
	void crear(Obra transientInstance);

	/**
	 * Borra las obras que le pasamos por parametro.
	 * 
	 * @param obrasEliminar
	 */
	void delete(List<Obra> obrasEliminar);

	/**
	 * Devuelve el Set ObraDocumentos actualizado para guardar directamente en
	 * Base de datos.
	 * 
	 * @param listaDoc
	 * @param obra
	 * @return
	 */
	Set<ObraDocumento> getObraDocumentosUpdated(List<Integer> listaDoc, Obra obra);

	/**
	 * Devuelve las listas de obras dadas de altas que corresponde con el filtro
	 * que le pasamos.
	 * 
	 * @param filtro
	 * @return List<Obra>
	 */
	List<Obra> getObrasActivas(FiltroLista filtro);

	/**
	 * Obtenemos el numero de total de elementos de la lista que obtuvimos.
	 * 
	 * @return int
	 */
	int getTotal();
}
